package com.geostar.gmp.thread;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.dom4j.Element;
import com.geostar.gmp.dao.ILogDao;
import com.geostar.gmp.dao.IPc_dataDao;
import com.geostar.gmp.global.ConfigValue;
import com.geostar.gmp.mina.MinaClient;
import com.geostar.gmp.model.Pc_data;
import com.geostar.gmp.model.Pc_ip;
import com.geostar.gmp.model.RecordInfo;
import com.geostar.gmp.model.factory.SessionFactory;
import com.geostar.gmp.snmp.GetStatus;
import com.geostar.gmp.utils.ReadXMLUtils;

/**
 * 文件名:GetPc_info_Job.java
 * 功能: 根据IP获取电脑信息状态
 * 目前支持方法
 * --------------------------------------
 * 初始版本 
 * 作者: yesong
 * 时间: Apr 10, 2014
 */
public class GetPc_info_Job extends AbstractJob{

	private Pc_ip pc_ip;
	
	@SuppressWarnings("unchecked")
	@Override
	public Object execute() {

		SqlSession session = SessionFactory.createSession();
		try {
			GetStatus getStatus = new GetStatus();
			getStatus.setIp(pc_ip.getIp());
			/** 判断机器是否能正常联通 **/
			if(getStatus.isLinked()){
				// 监控进程
				new MinaClient().toLinkServer(pc_ip.getIp());
				
				
				// 开启读取XML文件流
				ReadXMLUtils.loadXML(ConfigValue.MIBCONFIG_XML);
				//监控电脑信息
				Element e = ReadXMLUtils.readElementsById(pc_ip.getIp());
				if (e != null){
					getStatus.setElement(e);
					String cpu = getStatus.getCpu();
					//TODO getRom
					//TODO getDisk
					//TODO getNet
					Pc_data pc_data = new Pc_data(pc_ip.getIp(),cpu,null,null,null);
					IPc_dataDao pc_dataDao = session.getMapper(IPc_dataDao.class);
					pc_dataDao.insert(pc_data);
					session.commit();
					
				} else {
					RecordInfo recordInfo = new RecordInfo(pc_ip.getIp()+"无法再配置文件找到");
					ILogDao logDao = session.getMapper(ILogDao.class);
					logDao.insert_record(recordInfo);
					session.commit();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			SessionFactory.closeSession(session);
			// 关闭文件流
			ReadXMLUtils.closeInputStream();
		}
		return null;
	}

	public Pc_ip getPc_ip() {
		return pc_ip;
	}

	public void setPc_ip(Pc_ip pc_ip) {
		this.pc_ip = pc_ip;
	}
}
